Social Login হল একটি পদ্ধতি যেখানে ব্যবহারকারীরা তাদের সোশ্যাল মিডিয়া অ্যাকাউন্ট যেমন Facebook, Google, Twitter, GitHub ইত্যাদি ব্যবহার করে অ্যাপ্লিকেশনে লগইন করতে পারেন। Spring Security ব্যবহার করে সোশ্যাল লগইন ইন্টিগ্রেশন খুবই সহজ এবং নিরাপদ।
Spring Security-এর মাধ্যমে OAuth 2.0 এবং OpenID Connect এর মতো স্ট্যান্ডার্ড প্রোটোকল ব্যবহার করে সোশ্যাল লগইন ইন্টিগ্রেশন করা হয়। এখানে, আমরা Spring Security OAuth2 ব্যবহার করে Google Login এবং Facebook Login এর উদাহরণ দেখাবো।
Maven Dependencies
প্রথমে, আপনাকে Spring Boot Starter Security এবং Spring Security OAuth2 Client ডিপেনডেন্সি যোগ করতে হবে।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
Google Login Integration Example
১. Google Developer Console এ অ্যাপ্লিকেশন তৈরি
- Google Developer Console এ যান।
- একটি নতুন প্রোজেক্ট তৈরি করুন।
- "OAuth consent screen" তৈরি করুন।
- "Credentials" ট্যাবে গিয়ে OAuth 2.0 Client IDs তৈরি করুন।
- Client ID এবং Client Secret পাবেন যা আপনাকে আপনার অ্যাপ্লিকেশনে ব্যবহার করতে হবে।
২. application.yml বা application.properties কনফিগারেশন
application.yml-এ Google-এর Client ID এবং Secret কনফিগার করুন:
spring:
security:
oauth2:
client:
registration:
google:
client-id: YOUR_GOOGLE_CLIENT_ID
client-secret: YOUR_GOOGLE_CLIENT_SECRET
scope: profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/google"
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/v2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
৩. Controller তৈরি এবং ইউজারের ডেটা ফেচ করা
OAuth2LoginAuthenticationFilter ব্যবহার করে Google-এর ব্যবহারকারীর ডেটা গ্রহণ করা যেতে পারে। নিচে একটি উদাহরণ:
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@RestController
public class SocialLoginController {
@GetMapping("/login-success")
public String loginSuccess(@AuthenticationPrincipal OAuth2User oauth2User) {
return "Logged in as: " + oauth2User.getAttributes().get("name");
}
}
৪. Spring Security Configuration
Spring Security কনফিগারেশনটি OAuth 2.0 ক্লায়েন্ট সাপোর্ট কনফিগার করতে হবে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests()
.requestMatchers("/login-success").authenticated() // Login success URL
.anyRequest().permitAll() // All other URLs are publicly accessible
.and()
.oauth2Login(); // Enable OAuth2 login
return http.build();
}
}
Facebook Login Integration Example
১. Facebook Developer Console এ অ্যাপ্লিকেশন তৈরি
- Facebook Developer Console এ যান।
- একটি নতুন অ্যাপ্লিকেশন তৈরি করুন।
- "Facebook Login" ইন্টিগ্রেট করুন এবং OAuth settings এ
redirect URIসেট করুন।
২. application.yml কনফিগারেশন
spring:
security:
oauth2:
client:
registration:
facebook:
client-id: YOUR_FACEBOOK_APP_ID
client-secret: YOUR_FACEBOOK_APP_SECRET
scope: public_profile, email
redirect-uri: "{baseUrl}/login/oauth2/code/facebook"
client-name: Facebook
provider:
facebook:
authorization-uri: https://www.facebook.com/v12.0/dialog/oauth
token-uri: https://graph.facebook.com/v12.0/oauth/access_token
user-info-uri: https://graph.facebook.com/me?fields=id,name,email
৩. Controller তৈরি
import org.springframework.security.oauth2.client.authentication.OAuth2AuthenticationToken;
import org.springframework.security.oauth2.core.user.OAuth2User;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.security.core.annotation.AuthenticationPrincipal;
@RestController
public class SocialLoginController {
@GetMapping("/login-success")
public String loginSuccess(@AuthenticationPrincipal OAuth2User oauth2User) {
return "Logged in as: " + oauth2User.getAttributes().get("name");
}
}
৪. Spring Security Configuration
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeHttpRequests()
.requestMatchers("/login-success").authenticated() // Login success URL
.anyRequest().permitAll() // All other URLs are publicly accessible
.and()
.oauth2Login(); // Enable OAuth2 login
return http.build();
}
}
Social Login Flow
- User clicks on social login button (e.g., Google or Facebook).
- OAuth2 authorization request is sent to the respective provider (Google/Facebook).
- User is redirected back to the application with an authorization code.
- OAuth2 access token is obtained using the authorization code.
- User information is fetched (e.g., name, email) and saved to the session.
উপসংহার
Spring Security এবং OAuth2 এর মাধ্যমে Social Login ইন্টিগ্রেশন খুবই শক্তিশালী এবং সহজ। এই উদাহরণে আমরা Google এবং Facebook এর মাধ্যমে সোশ্যাল লগইন কনফিগারেশন দেখেছি, কিন্তু একই পদ্ধতি অন্যান্য সোশ্যাল মিডিয়া প্রোভাইডার যেমন Twitter, GitHub ইত্যাদির জন্যও ব্যবহার করা যায়।
আপনার প্রয়োজন অনুযায়ী কাস্টমাইজেশন বা আরও কোনও সহায়তা চাইলে জানাতে পারেন!
Social Login হল একটি পদ্ধতি যেখানে ব্যবহারকারীরা তাদের সোশ্যাল মিডিয়া একাউন্ট (যেমন Facebook, Google, Twitter, GitHub ইত্যাদি) ব্যবহার করে আপনার অ্যাপ্লিকেশনে লগইন করতে পারেন, যেখানে তাদের আলাদা করে ইউজারনেম এবং পাসওয়ার্ড মনে রাখার প্রয়োজন হয় না। এটি ব্যবহারকারীদের জন্য একটি সুবিধাজনক পদ্ধতি, কারণ তারা তাদের সোশ্যাল মিডিয়া ক্রিডেনশিয়াল ব্যবহার করে সহজে লগইন করতে পারেন।
Social Login কি?
Social Login এর মাধ্যমে ব্যবহারকারীরা যেমন Facebook, Google, Twitter বা GitHub এর মত সোশ্যাল প্ল্যাটফর্মের মাধ্যমে আপনার অ্যাপ্লিকেশন বা ওয়েবসাইটে লগইন করতে পারে। এই প্রক্রিয়ায় ব্যবহারকারীকে পুনরায় লগইন করার জন্য ইউজারনেম ও পাসওয়ার্ড দেওয়া লাগবে না। এর পরিবর্তে, তারা আগে থেকেই ওই সোশ্যাল প্ল্যাটফর্মে লগইন থাকলে সহজেই অ্যাপ্লিকেশনে প্রবেশ করতে পারে।
Social Login কীভাবে কাজ করে?
- OAuth 2.0 ও OpenID Connect Protocols:
- Social login সাধারণত OAuth 2.0 এবং OpenID Connect প্রোটোকল ব্যবহার করে।
- OAuth 2.0 অনুমতি প্রোটোকল যা ব্যবহারকারীর সোশ্যাল একাউন্টের সাথে সংযুক্ত হয়ে অ্যাপ্লিকেশনকে এক্সেস প্রদান করে।
- OpenID Connect একটি সুরক্ষিত এবং নির্ভরযোগ্য অথেন্টিকেশন প্রোটোকল যা OAuth 2.0-এর উপর ভিত্তি করে।
- Authorization Code Flow:
- প্রথমে, ব্যবহারকারী সোশ্যাল মিডিয়া প্ল্যাটফর্মে লগইন করার জন্য অ্যাপ্লিকেশনের মাধ্যমে অনুরোধ পাঠান।
- সোশ্যাল মিডিয়া প্ল্যাটফর্ম ব্যবহারকারীকে অনুমতি দিলে একটি Authorization Code প্রদান করে।
- তারপর, এই কোডটি ব্যবহার করে অ্যাপ্লিকেশন Access Token গ্রহণ করে, যা অ্যাপ্লিকেশনকে ব্যবহারকারীর সোশ্যাল প্রোফাইল অ্যাক্সেস করার অনুমতি দেয়।
- User Information Retrieval:
- একবার অ্যাক্সেস টোকেন পাওয়া গেলে, অ্যাপ্লিকেশন সোশ্যাল মিডিয়া প্ল্যাটফর্ম থেকে ব্যবহারকারীর প্রোফাইল এবং অন্যান্য তথ্য গ্রহণ করতে পারে, যেমন ইমেইল ঠিকানা, নাম ইত্যাদি।
Social Login কেন প্রয়োজন?
- ব্যবহারকারীর অভিজ্ঞতা উন্নত করা:
- সহজ ও দ্রুত লগইন: সোশ্যাল লগইন ব্যবহারের মাধ্যমে ব্যবহারকারী সহজে লগইন করতে পারে, কারণ তাদের আলাদা করে ইউজারনেম এবং পাসওয়ার্ড মনে রাখতে হয় না। ফলে, ব্যবহারকারীদের জন্য প্রক্রিয়া অনেকটাই সহজ ও দ্রুত হয়।
- ফাস্ট রেজিস্ট্রেশন: নতুন ব্যবহারকারীকে দ্রুত রেজিস্ট্রেশন প্রক্রিয়া শেষ করতে সহায়ক হয়। তারা শুধুমাত্র সোশ্যাল মিডিয়া একাউন্ট দিয়ে সাইন আপ করতে পারে, যা তাদের জন্য সময় বাঁচায়।
- নিরাপত্তা বৃদ্ধি:
- ফিশিং রোধ: ব্যবহারকারীরা সোশ্যাল মিডিয়া একাউন্টের মাধ্যমে লগইন করলে, তাদের পাসওয়ার্ড অ্যাপ্লিকেশনের সাথে শেয়ার করা হয় না। এটি তাদের সোশ্যাল মিডিয়া প্ল্যাটফর্মে সুরক্ষিত রাখে এবং ফিশিং আক্রমণের ঝুঁকি কমায়।
- দ্বিতীয় স্তরের নিরাপত্তা: সোশ্যাল প্ল্যাটফর্মগুলোর মতো Google বা Facebook উন্নত নিরাপত্তা ব্যবস্থা (যেমন 2FA - Two-Factor Authentication) ব্যবহার করে থাকে, যা অ্যাপ্লিকেশনকেও সুরক্ষিত রাখে।
- সোশ্যাল প্রোফাইল তথ্য ব্যবহারের সুবিধা:
- সোশ্যাল লগইনের মাধ্যমে আপনি ব্যবহারকারীর ইমেইল, নাম, প্রোফাইল ছবি, লোকেশন ইত্যাদি তথ্য সংগ্রহ করতে পারেন, যা আপনার অ্যাপ্লিকেশনকে আরও কাস্টমাইজড করতে সহায়ক।
- সোশ্যাল প্রোফাইল তথ্য অ্যাপ্লিকেশন ব্যবহারে সহায়ক হতে পারে যেমন ব্যবহারকারীর পছন্দ অনুসারে কনটেন্ট শো করা।
- ব্যবহারকারীর জন্য কম পাসওয়ার্ড ম্যানেজমেন্ট:
- আজকাল অনেকেই একাধিক প্ল্যাটফর্মের জন্য আলাদা পাসওয়ার্ড মনে রাখতে পারেন না। সোশ্যাল লগইন এর মাধ্যমে তারা একটি পাসওয়ার্ড ব্যবহার করে বিভিন্ন সাইটে প্রবেশ করতে পারে, যা তাদের জন্য সুবিধাজনক।
- বিশ্বস্ততা ও ব্র্যান্ড পরিচিতি:
- বড় সোশ্যাল মিডিয়া প্ল্যাটফর্ম যেমন Google, Facebook, Twitter, GitHub এর মাধ্যমে লগইন করার কারণে ব্যবহারকারীরা সহজেই আপনার অ্যাপ্লিকেশনে তাদের সোশ্যাল মিডিয়া একাউন্টে লগইন করতে পারে এবং এটি আরও বিশ্বাসযোগ্যতা বাড়ায়।
- এগুলি বিশ্বস্ত ব্র্যান্ড, তাই এটি ব্যবহারকারীর মধ্যে অতিরিক্ত আস্থা সৃষ্টি করে।
Spring Security এবং Social Login Integration
Spring Security Social একটি জনপ্রিয় প্রকল্প যা Spring Security-তে সোশ্যাল লগইন ইন্টিগ্রেশন প্রদান করে। Spring Security Social ব্যবহার করলে আপনি বিভিন্ন সোশ্যাল মিডিয়া প্ল্যাটফর্ম যেমন Google, Facebook, Twitter, GitHub ইত্যাদি ব্যবহারকারীর সাথে সংযুক্ত করতে পারবেন।
Spring Security Social Setup
- ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-config</artifactId>
<version>1.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.social</groupId>
<artifactId>spring-social-facebook</artifactId>
<version>4.0.0.M1</version>
</dependency>
- Social Login Configuration: Spring Social কনফিগারেশনে সোশ্যাল মিডিয়া অ্যাপ্লিকেশনের Client ID এবং Client Secret প্রদান করতে হবে।
@Configuration
@EnableSocial
public class SocialConfig extends SocialConfigurerAdapter {
@Override
public UsersConnectionRepository getUsersConnectionRepository(ConnectionFactoryLocator connectionFactoryLocator) {
return new InMemoryUsersConnectionRepository(connectionFactoryLocator);
}
@Bean
public FacebookConnectionFactory facebookConnectionFactory() {
return new FacebookConnectionFactory("YOUR_APP_ID", "YOUR_APP_SECRET");
}
}
- Social Login Controller:
@Controller
@RequestMapping("/social")
public class SocialLoginController {
@Autowired
private ConnectionRepository connectionRepository;
@GetMapping("/connect/facebook")
public String connectFacebook() {
return "redirect:/connect/facebook";
}
@RequestMapping("/login")
public String socialLogin() {
// Social login logic here
return "socialHome";
}
}
উপসংহার
Social Login ব্যবহারকারী অভিজ্ঞতা উন্নত করতে সহায়ক এবং একটি জনপ্রিয় অথেন্টিকেশন পদ্ধতি। এটি সহজ, দ্রুত এবং নিরাপদ লগইন প্রদান করে, যার ফলে ব্যবহারকারীরা সহজে আপনার অ্যাপ্লিকেশনে প্রবেশ করতে পারে। এটির মাধ্যমে অ্যাপ্লিকেশন আরও নিরাপদ হয় এবং ব্যবহারকারীদের সোশ্যাল প্রোফাইলের তথ্যের মাধ্যমে বিভিন্ন সুবিধা পাওয়া যায়। Spring Security Social এর মাধ্যমে সোশ্যাল লগইন সেটআপ করা সহজ এবং দ্রুত।
স্প্রিং সিকিউরিটি দিয়ে আপনি সহজেই OAuth 2.0 ভিত্তিক সাইন-ইন সিস্টেম ইন্টিগ্রেট করতে পারেন, যেমন Google, Facebook, এবং GitHub। এই সমস্ত প্ল্যাটফর্ম OAuth 2.0 প্রটোকল ব্যবহার করে, যা একটি নিরাপদ অথেন্টিকেশন পদ্ধতি প্রদান করে। স্প্রিং সিকিউরিটি OAuth2 Login এবং OAuth2 Client সুবিধা দিয়ে তৃতীয় পক্ষের লগইন ইন্টিগ্রেট করা সহজ করে দেয়।
OAuth 2.0 Authentication Workflow:
- ব্যবহারকারী লগইন করতে চান এমন একটি সেবা (Google, Facebook, GitHub) নির্বাচন করেন।
- স্প্রিং সিকিউরিটি সেই সেবার OAuth2 সার্ভারে পাঠায় ব্যবহারকারীর অনুমতি চেয়ে।
- ব্যবহারকারী অনুমতি দিলে, স্প্রিং সিকিউরিটি সাফল্যের সাথে access token সংগ্রহ করে।
- এরপর, স্প্রিং সিকিউরিটি ব্যবহারকারীকে অ্যাপ্লিকেশনটির ভিতরে নিয়ে আসে।
কনফিগারেশন স্টেপস
1. ডিপেন্ডেন্সি যোগ করা
Spring Boot অ্যাপ্লিকেশন থেকে Google, Facebook, অথবা GitHub OAuth 2.0 এ লগইন করতে হলে, প্রথমে spring-boot-starter-oauth2-client ডিপেন্ডেন্সি যোগ করতে হবে।
Maven:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
Gradle:
implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'
2. Google OAuth Integration
Google Developer Console-এ অ্যাপ্লিকেশন সেটআপ:
- Google Developer Console এ যান।
- নতুন একটি প্রজেক্ট তৈরি করুন।
- "OAuth 2.0 Client IDs" তৈরি করুন এবং Authorized Redirect URIs-এ
http://localhost:8080/login/oauth2/code/googleURLটি যুক্ত করুন। - Client ID এবং Client Secret সংগ্রহ করুন।
আবশ্যক কনফিগারেশন:
application.yml বা application.properties ফাইলে Google এর OAuth 2.0 কনফিগারেশন যুক্ত করুন।
application.yml:
spring:
security:
oauth2:
client:
registration:
google:
client-id: <Your-Client-ID>
client-secret: <Your-Client-Secret>
scope:
- profile
- email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: Google
provider:
google:
authorization-uri: https://accounts.google.com/o/oauth2/auth
token-uri: https://oauth2.googleapis.com/token
user-info-uri: https://www.googleapis.com/oauth2/v3/userinfo
3. Facebook OAuth Integration
Facebook Developer Console-এ অ্যাপ্লিকেশন সেটআপ:
- Facebook Developer Console এ যান।
- নতুন একটি অ্যাপ্লিকেশন তৈরি করুন।
- "Facebook Login" সেটআপ করুন এবং Valid OAuth Redirect URIs এ
http://localhost:8080/login/oauth2/code/facebookURLটি যুক্ত করুন। - App ID এবং App Secret সংগ্রহ করুন।
কনফিগারেশন:
application.yml:
spring:
security:
oauth2:
client:
registration:
facebook:
client-id: <Your-Facebook-App-ID>
client-secret: <Your-Facebook-App-Secret>
scope:
- email
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: Facebook
provider:
facebook:
authorization-uri: https://www.facebook.com/dialog/oauth
token-uri: https://graph.facebook.com/v9.0/oauth/access_token
user-info-uri: https://graph.facebook.com/v9.0/me?fields=id,name,email
4. GitHub OAuth Integration
GitHub Developer Console-এ অ্যাপ্লিকেশন সেটআপ:
- GitHub Developer Console এ যান।
- একটি নতুন OAuth অ্যাপ্লিকেশন তৈরি করুন।
- Authorization callback URL এ
http://localhost:8080/login/oauth2/code/githubURLটি যুক্ত করুন। - Client ID এবং Client Secret সংগ্রহ করুন।
কনফিগারেশন:
application.yml:
spring:
security:
oauth2:
client:
registration:
github:
client-id: <Your-GitHub-Client-ID>
client-secret: <Your-GitHub-Client-Secret>
scope:
- read:user
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
authorization-grant-type: authorization_code
client-name: GitHub
provider:
github:
authorization-uri: https://github.com/login/oauth/authorize
token-uri: https://github.com/login/oauth/access_token
user-info-uri: https://api.github.com/user
5. কাস্টম কনফিগারেশন (Optional)
স্প্রিং সিকিউরিটি এর মাধ্যমে কাস্টম ইউজার ডিটেইলস সংগ্রহ করা এবং কাস্টম AuthenticationSuccessHandler বা AuthenticationFailureHandler ব্যবহার করা যায়।
Custom Authentication Success Handler:
@Component
public class OAuth2AuthenticationSuccessHandler extends SimpleUrlAuthenticationSuccessHandler {
@Override
public void onAuthenticationSuccess(HttpServletRequest request,
HttpServletResponse response,
Authentication authentication) throws IOException, ServletException {
// Custom logic here (e.g. redirect or logging)
super.onAuthenticationSuccess(request, response, authentication);
}
}
Custom Authentication Failure Handler:
@Component
public class OAuth2AuthenticationFailureHandler implements AuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request,
HttpServletResponse response,
AuthenticationException exception) throws IOException {
// Handle failure (e.g. logging or redirect to error page)
}
}
6. Security Configuration
Spring Security কনফিগারেশন ফাইলে OAuth 2.0 সাপোর্ট সক্ষম করতে হবে। নিচের কনফিগারেশনটি আপনার অ্যাপ্লিকেশনটি বিভিন্ন OAuth2 সাইন-ইন সিস্টেমের সাথে ইন্টিগ্রেট করতে সাহায্য করবে।
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/", "/home").permitAll() // Public access
.anyRequest().authenticated() // Other requests require authentication
.and()
.oauth2Login() // Enable OAuth2 Login
.and()
.logout().permitAll();
}
}
7. Run and Test
স্প্রিং বুট অ্যাপ্লিকেশন চালু করুন। ব্রাউজারে গিয়ে /login URL-এ ক্লিক করলে, আপনি নির্বাচিত সোশ্যাল মিডিয়া (Google, Facebook, GitHub) এর মাধ্যমে লগইন করার অপশন দেখতে পাবেন।
উপসংহার
Spring Security-এর মাধ্যমে Google, Facebook, এবং GitHub-এর সাথে OAuth2 সাইন-ইন ইন্টিগ্রেশন অত্যন্ত সহজ এবং সুরক্ষিত। OAuth 2.0 প্রোটোকল ব্যবহার করে আপনি সহজে তৃতীয় পক্ষের অথেন্টিকেশন ব্যবস্থা আপনার অ্যাপ্লিকেশনে যোগ করতে পারবেন।
Social login হল এমন একটি পদ্ধতি যেখানে ব্যবহারকারীরা তাদের সোশ্যাল মিডিয়া অ্যাকাউন্ট (যেমন Google, Facebook, Twitter ইত্যাদি) ব্যবহার করে লগইন করতে পারেন। Spring Security-তে Social login কনফিগার করার জন্য আমরা সাধারণত Spring Social অথবা Spring Security OAuth লাইব্রেরি ব্যবহার করি। তবে, Spring Boot অ্যাপ্লিকেশনে সহজে Social login ইন্টিগ্রেট করতে আমরা Spring Security OAuth2 বা Spring Security 5+ এর OAuth2 Login ফিচার ব্যবহার করতে পারি।
এখানে আমরা Google এর সোশ্যাল লগইন কনফিগার করার উদাহরণ দেখব।
ধাপ ১: ডিপেনডেন্সি যোগ করুন
আপনার pom.xml ফাইলে নিচের ডিপেনডেন্সি যোগ করুন:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
এটি OAuth2 Login এবং থাইমিলিফ (Thymeleaf) ইন্টিগ্রেট করবে, যা আমাদের Social login ইন্টারফেস তৈরি করতে সহায়ক হবে।
ধাপ ২: application.properties কনফিগার করুন
আপনি Google এর OAuth ক্লায়েন্ট কনফিগার করার জন্য application.properties ফাইলে নিচের তথ্য যোগ করুন। এই তথ্যগুলি Google Developer Console থেকে পাবেন।
spring.security.oauth2.client.registration.google.client-id=YOUR_GOOGLE_CLIENT_ID
spring.security.oauth2.client.registration.google.client-secret=YOUR_GOOGLE_CLIENT_SECRET
spring.security.oauth2.client.registration.google.scope=profile,email
spring.security.oauth2.client.registration.google.redirect-uri={baseUrl}/login/oauth2/code/{registrationId}
spring.security.oauth2.client.provider.google.authorization-uri=https://accounts.google.com/o/oauth2/auth
spring.security.oauth2.client.provider.google.token-uri=https://oauth2.googleapis.com/token
spring.security.oauth2.client.provider.google.user-info-uri=https://www.googleapis.com/oauth2/v3/userinfo
- client-id এবং client-secret আপনি Google Developer Console থেকে তৈরি করতে পারবেন।
- redirect-uri হল লগইন পরবর্তী URL যেখানে ব্যবহারকারী যাবে।
ধাপ ৩: Spring Security কনফিগারেশন
Spring Security তে OAuth2 Login কনফিগার করার জন্য SecurityFilterChain এবং OAuth2LoginAuthenticationFilter ব্যবহার করতে হবে। নিচে একটি উদাহরণ দেওয়া হলো।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.web.SecurityFilterChain;
@Configuration
@EnableWebSecurity
public class SecurityConfig {
@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/login**", "/oauth2/**").permitAll() // Allow public access to login and oauth2 URL
.anyRequest().authenticated() // All other requests must be authenticated
.and()
.oauth2Login()
.loginPage("/login"); // Custom login page if you want
return http.build();
}
}
এটি নিশ্চিত করবে যে /login এবং /oauth2/** URL গুলি পাবলিক অ্যাক্সেসযোগ্য, এবং অন্যান্য URL গুলোর জন্য অথেন্টিকেশন প্রয়োজন।
ধাপ ৪: Custom Login Page তৈরি করুন (Optional)
আপনার যদি কাস্টম লগইন পেজ থাকে, তবে login.html তৈরি করতে পারেন। নিচে একটি সহজ উদাহরণ:
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<a href="/oauth2/authorization/google">Login with Google</a>
</body>
</html>
এখানে, যখন ব্যবহারকারী Login with Google লিঙ্কে ক্লিক করবে, তখন তারা Google-এ রিডিরেক্ট হবে এবং লগইন প্রক্রিয়া সম্পন্ন করবে।
ধাপ ৫: Controller তৈরি করুন
আপনি ব্যবহারকারীর লগইন তথ্য সংগ্রহ করতে একটি Controller তৈরি করতে পারেন। নিচে একটি উদাহরণ দেওয়া হলো:
import org.springframework.security.core.Authentication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class LoginController {
@GetMapping("/login")
public String login() {
return "login"; // Return login page
}
@GetMapping("/home")
public String home(Authentication authentication) {
// Get the authenticated user details
String userName = authentication.getName();
System.out.println("User Name: " + userName);
return "home"; // Home page after login
}
}
এখানে, যখন ব্যবহারকারী সঠিকভাবে লগইন করবেন, তারা /home URL-এ রিডিরেক্ট হবে।
ধাপ ৬: Home Page তৈরি করুন (Optional)
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome</h1>
<p>You are logged in as: <span th:text="${authentication.name}"></span></p>
<a href="/logout">Logout</a>
</body>
</html>
ধাপ ৭: Google Developer Console কনফিগারেশন
Google Developer Console-এ আপনার অ্যাপ্লিকেশনের জন্য একটি OAuth 2.0 Client ID এবং Client Secret তৈরি করুন:
- Google Developer Console-এ প্রবেশ করুন.
- একটি নতুন প্রোজেক্ট তৈরি করুন (যদি প্রয়োজন হয়)।
APIs & Services > Credentialsএ যান এবং একটি নতুন OAuth 2.0 Client ID তৈরি করুন।- Authorized redirect URIs এ আপনার redirect URL দিন (যেমন
http://localhost:8080/login/oauth2/code/google)। - Client ID এবং Client Secret কপি করুন এবং
application.properties-এ পেস্ট করুন।
ধাপ ৮: প্রজেক্ট চালু করুন
এখন আপনার প্রজেক্ট চালু করুন এবং ব্রাউজারে গিয়ে Google এর মাধ্যমে লগইন করুন:
mvn spring-boot:run
এখন আপনি Google Social Login ব্যবহার করে আপনার অ্যাপ্লিকেশনে লগইন করতে পারবেন।
উপসংহার
Spring Security-তে Social Login কনফিগার করার মাধ্যমে আপনি ব্যবহারকারীদের তাদের সোশ্যাল মিডিয়া অ্যাকাউন্ট (যেমন Google) ব্যবহার করে সহজে লগইন করতে সক্ষম করতে পারেন। এই প্রক্রিয়ার মধ্যে Spring Security OAuth2 ক্লায়েন্ট কনফিগারেশন ব্যবহার করা হয়, যা Spring Boot অ্যাপ্লিকেশনে খুব সহজে ইন্টিগ্রেট করা যায়।
Read more